package xj.graph2d.graph;

import java.util.HashMap;
import java.util.Iterator;

public class Attributes {

  public Attributes(int type) {
    this.type = type;
    attributes = new HashMap<String, Attribute>();
  }

  public Object setAttribute(Attribute attr) {
    if (attr == null) {
      return null;
    }
    return setAttribute(attr.getName(), attr.getValue());
  }

  public Object setAttribute(String name, Object value) {
    if (attributes == null) {
      attributes = new HashMap<String, Attribute>();
    }
    if (name == null) {
      throw new IllegalArgumentException(
	  "cannot set an attribute using a null name");
    }

    Object oldValue = attributes.get(name);
    Attribute crntAttr = new Attribute(type, name, value);
    attributes.put(name, crntAttr);
    return oldValue;
  }

  public Attribute removeAttribute(String name) {
    if (name == null) {
      return null;
    }
    Attribute attr = null;
    if (attributes != null) {
      attr = attributes.remove(name);
    }
    return attr;
  }

  public Attribute getAttribute(String key) {
    if (attributes == null) {
      return null;
    }
    return attributes.get(key);
  }

  public Object getAttributeValue(String key) {
    Object value = null;
    Attribute attr = getAttribute(key);
    if (attr != null) {
      value = attr.getValue();
    }
    return value;
  }

  public boolean hasAttributeForKey(String key) {
    if (getAttribute(key) == null) {
      return false;
    } else {
      return true;
    }
  }

  public Iterator<Attribute> iterator() {
    if (attributes != null) {
      return attributes.values().iterator();
    }
    return null;
  }

  public boolean isEmpty() {
    if (attributes != null) {
      return attributes.isEmpty();
    }
    return false;
  }

  // attributes
  protected HashMap<String, Attribute> attributes = null;

  protected int type;

}
